'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
exports.getAllRect = exports.getRect = exports.pickExclude = exports.requestAnimationFrame = exports.addUnit = exports.getSystemInfoSync = exports.nextTick = exports.range = exports.isObj = exports.isDef = void 0
var validator_1 = require('./validator')
function isDef(value) {
  return value !== undefined && value !== null
}
exports.isDef = isDef
function isObj(x) {
  var type = typeof x
  return x !== null && (type === 'object' || type === 'function')
}
exports.isObj = isObj
function range(num, min, max) {
  return Math.min(Math.max(num, min), max)
}
exports.range = range
function nextTick(fn) {
  setTimeout(function() {
    fn()
  }, 1000 / 30)
}
exports.nextTick = nextTick
var systemInfo
function getSystemInfoSync() {
  if (systemInfo == null) {
    systemInfo = wx.getSystemInfoSync()
  }
  return systemInfo
}
exports.getSystemInfoSync = getSystemInfoSync
function addUnit(value) {
  if (!isDef(value)) {
    return undefined
  }
  value = String(value)
  return validator_1.isNumber(value) ? value + 'px' : value
}
exports.addUnit = addUnit
function requestAnimationFrame(cb) {
  var systemInfo = getSystemInfoSync()
  if (systemInfo.platform === 'devtools') {
    return nextTick(cb)
  }
  return wx
    .createSelectorQuery()
    .selectViewport()
    .boundingClientRect()
    .exec(function() {
      cb()
    })
}
exports.requestAnimationFrame = requestAnimationFrame
function pickExclude(obj, keys) {
  if (!validator_1.isPlainObject(obj)) {
    return {}
  }
  return Object.keys(obj).reduce(function(prev, key) {
    if (!keys.includes(key)) {
      prev[key] = obj[key]
    }
    return prev
  }, {})
}
exports.pickExclude = pickExclude
function getRect(selector) {
  var _this = this
  return new Promise(function(resolve) {
    wx.createSelectorQuery()
      .in(_this)
      .select(selector)
      .boundingClientRect()
      .exec(function(rect) {
        if (rect === void 0) {
          rect = []
        }
        return resolve(rect[0])
      })
  })
}
exports.getRect = getRect
function getAllRect(selector) {
  var _this = this
  return new Promise(function(resolve) {
    wx.createSelectorQuery()
      .in(_this)
      .selectAll(selector)
      .boundingClientRect()
      .exec(function(rect) {
        if (rect === void 0) {
          rect = []
        }
        return resolve(rect[0])
      })
  })
}
exports.getAllRect = getAllRect
